package com.eastfair.venuebooking.service;

import com.eastfair.boot.service.SuperService;
import com.eastfair.venuebooking.dto.*;
import com.eastfair.venuebooking.entity.ContactRef;

import java.util.List;

/**
 * <p>
 * 业务接口
 * 联系人关联表
 * </p>
 *
 * @author clm
 * @date 2022 -06-13
 */
public interface ContactRefService extends SuperService<ContactRef> {

    /**
     * 查询联系人关系.
     *
     * @param query the query
     * @return the contact ref
     */
    ContactRef getContactRef(ContactRefQuery query);

    /**
     * 主要联系人关系是否存在.
     *
     * @param query the query
     * @return the boolean true：存在/false：不存在
     */
    boolean existImportantContactRef(ContactRefQuery query);

    /**
     * 联系人ID列表查询客户主要联系人关系是否存在.
     *
     * @param contactIds the contact ids
     * @return the boolean true：存在/false：不存在
     */
    boolean existCustomerImportantContractRefByContactIds(List<Long> contactIds);

    /**
     * 联系人ID列表查询商机主要联系人关系是否存在.
     *
     * @param contactIds the contact ids
     * @return the boolean true：存在/false：不存在
     */
    boolean existOpportunityImportantContractRefByContactIds(List<Long> contactIds);


    /**
     * 更新.
     *
     * @param updateDTO the update dto
     * @return the boolean
     */
    boolean updateContactRef(ContactRefDTO updateDTO);

    /**
     * 更新是否首要联系人.
     *
     * @param updateDTO the update dto
     * @return the boolean
     */
    boolean updateImportant(ContactRefDTO updateDTO);

    /**
     * 更新为非首要联系人.
     *
     * @param updateDTO the update dto
     * @return the boolean
     */
    boolean updateUnimportant(ContactRefDTO updateDTO);

    /**
     * 更新选择联系人.
     *
     * @param updateDTO the contact ref update dto
     * @return the boolean
     */
    boolean updateChooseContactRef(ContactRefDTO updateDTO);

    /**
     * 移除联系人关系.
     *
     * @param updateDTO the update dto
     * @return the boolean
     */
    boolean removeContactRef(ContactRefDTO updateDTO);

    /**
     * 联系人ID删除联系人关系.
     *
     * @param contactId the contact id
     * @return the boolean
     */
    boolean removeByContactId(Long contactId);
}
